function stringIterator(s)
    local i = 1
    return function()
        if i <= #s then
            local c = s:sub(i, i)
            i = i + 1
            return c
        end
    end
end

for c in stringIterator("hello") do
    print(c)
end

-- 定义一个多状态迭代器
function multiIterator(array)
    local i = 1
    return function()
        if i <= #array then
            local c = array[i]
            i = i + 1
            return c
        end
    end
end

for c in multiIterator({1, 2, 3, 4, 5}) do
    print(c)
end

-- 上面的两个迭代器的区别
-- 1. 字符串迭代器每次返回一个字符，而多状态迭代器每次返回一个数组元素
-- 2. 字符串迭代器只需要一个状态变量，而多状态迭代器需要多个状态变量来记录当前迭代的位置
-- 3. 字符串迭代器可以用于任何字符串，而多状态迭代器只能用于数组

local newTable = {3, 1, 2}
table.insert(newTable, 4, "hello")
print(newTable[1])

local removeValue = table.remove(newTable, 1)
print(removeValue)
-- 打印 table, 不是打印指针，而是打印 table 的内容
print(newTable[1])
